package net.jingkao.app.common;

import android.util.Log;

public class Logger {
	
	private String tag;
	
	public Logger(String tag){
		this.tag = tag;
	}
	
	/**
	 * Log.i的输出为绿色，一般提示性的消息information
	 * @param msg
	 * @param objects
	 * @return
	 */
	public Logger i(String msg, Object...objects ){
		if(msg == null){
			Log.i(tag, "null");
		}
		Log.i(tag, String.format(msg, objects));
		return this;
	}
	
	/**
	 * Log.v 的调试颜色为黑色的，任何消息都会输出，这里的v代表verbose啰嗦的意思
	 * @param msg
	 * @param objects
	 * @return
	 */
	public Logger v(String msg, Object...objects ){
		if(msg == null){
			Log.v(tag, "null");
		}
		Log.v(tag, String.format(msg, objects));
		return this;
	}
	
	/**
	 * Log.d的输出颜色是蓝色的，仅输出debug调试的意思，但他会输出上层的信息，过滤起来可以通过DDMS的Logcat标签来选择.
	 * @param msg
	 * @param objects
	 * @return
	 */
	public Logger d(String msg, Object...objects ){
		if(msg == null){
			Log.d(tag, "null");
		}
		Log.d(tag, String.format(msg, objects));
		return this;
	}
	
	/**
	 * Log.w的意思为橙色，可以看作为warning警告，一般需要我们注意优化Android代码，同时选择它后还会输出Log.e的信息。
	 * @param msg
	 * @param objects
	 * @return
	 */
	public Logger w(String msg, Object...objects ){
		if(msg == null){
			Log.w(tag, "null");
		}
		Log.w(tag, String.format(msg, objects));
		return this;
	}
	
	/**
	 * Log.e为红色，可以想到error错误，这里仅显示红色的错误信息，这些错误就需要我们认真的分析，查看栈的信息了。 
	 * @param e
	 * @return
	 */
	public Logger e(Exception e){
		if(e == null){
			Log.e(tag, "null", e);
		}
		Log.e(tag, "" ,e);
		return this;
	}
	
	/**
	 * Log.e为红色，可以想到error错误，这里仅显示红色的错误信息，这些错误就需要我们认真的分析，查看栈的信息了。 
	 * @param e
	 * @param msg
	 * @param objects
	 * @return
	 */
	public Logger e(Exception e, String msg, Object...objects){
		if(msg == null){
			Log.e(tag, "null", e);
		}
		Log.e(tag, String.format(msg, objects), e);
		return this;
	}
	
	public static Logger getLog(Object obj){
		String tag = null;
		if(obj == null){
			tag = "DEFAULT";
		}if(obj instanceof String){
			tag = obj.toString();
		}else if(obj instanceof Class){
			tag = ((Class)obj).getCanonicalName();	
		}else{
			tag = obj.getClass().getCanonicalName();
		}
		return new Logger(tag);
	}

}
